message 認證符號 (MAC)
message authentication code
message の完全性を保證する
受信した message が、同じ祕密鍵を共有してゐる者が作った message であり改竄されてゐない事を保證できる
誤り檢出に似てるね
HMAC (hash-based message authentication code) $ {\rm HMAC}:=H((K~{\rm XOR}~{\rm opad})\|H((K~{\rm XOR}~{\rm ipad})\|{\rm message}))
SHA256 を用ゐた場合は「HMAC-SHA256」と呼ぶ $ K: 事前に共有した祕密鍵
hash 函數の block 長以下の長さである事
block 長より長い鍵は、hash 値を計算しそれを用ゐる
hash 函數の出力よりも長い事が推奬される
pad
hash 函數の block 長の byte 列を用意する。
64 byte の例
$ \rm opad: outer pad。0x36 (0b00110110) を 64 囘繰り返した byte 列
$ \rm ipad: inner pad。0x5C (0b01011100) を 64 囘繰り返した byte 列。$ \rm opadとは Hamming 距離 (4 になる) を離してある $ \rm message: 檢證する對象となる message
計算式は伸張攻撃 (length extension attack) を防ぐものとなってゐる
伸張攻撃が成立すると、正當な message の後に僞の message を附加した message について檢證の通る HMAC を生成できてしまふ digest から hash 函數の完了時の內部狀態を復元できると伸張攻撃が成立する
異なる padding を使って內外の hash 函數の初期狀態を變へる
外側の hash 函數を通す事で、digent に反映されてゐる內側の hash 函數の內部狀態を隱す
RFC 2104 (keyed-hashing for message authentication)
Encrypt-then-MAC (EtM)
MAC-then-Encrypt (MtE) は、padding oracle 攻撃 (padding oracle attack) 等の、惡意有る暗號文を復號化する事自體を利用した攻撃を受ける